#ifndef RT_TRACING
#define RT_TRACING
#include "mundo.h"
#include "camera.h"
#include "intersectobject.h"
#include "image.h"
#include "esfera.h"

class RayTracing {
	private:
		Mundo *mundo;
		Camera *camera;
		Image *imagem;
	
		Vector *right;//vetor calculado automaticamente, que indica a esquerda da tela
	
		//vetores que representam as laterais da cena
		Vector *p1;//esquerda
		Vector *p2;//direita
		Vector *p3;//topo
		Vector *p4;//rodape
	
		Vector *p2_p1;//Vetor P2 - P1
		Vector *p3_p4;//Vetor P3 - P4
	
		double tanTeta1;//tangente do angulo entre forward e o inicio da tela
		double tanTeta2;//tangente do angulo entre forward e o topo da tela
	
		int width;
		int height;
	
		//cria um raio que passa atravez do pixel i,j
		//deve-se lembrar que as coordenadas de câmera
		//estão representadas pelo primeiro quadrante 
		//do plano cartesiano: 0,0 representa o canto inferior esquerdo
		Ray* construirRaioPixel(int i,int j);
		Ray* construirRaioPixel2(int i,int j);
		//retorna o objeto mais proximo que é intersectado pelo raio
		IntersectObject* getIntersecsao(Ray *raio);
	
	public:
		RayTracing(Mundo *mundo,Camera *camera,int width, int height);
		~RayTracing();
	
		/**
		 * Renderiza o tamanho de imagem informado
		*/
		void render(int x,int y, int width, int height);
		Image getImage();
};

#include "raytracing.cpp"

#endif
